/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.tramite.beans;

import java.io.File;
import java.io.FileInputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.cip.esymons.colegiatura.be.Colegiado;
import org.cip.esymons.general.be.ColegiadoEspecialidad;
import org.cip.esymons.general.be.PersonaNatural;
import org.cip.esymons.general.util.ControladorAbstracto;
import org.cip.esymons.general.util.FormatoExportacion;
import org.cip.esymons.general.util.Reporteador;
import org.cip.esymons.general.util.Utiles;
import org.cip.esymons.tramite.adapters.RutaCarpetaReporte;
import org.cip.esymons.tramite.bc.DirectivosDelegate;
import org.cip.esymons.tramite.be.Certificado;
import org.cip.esymons.tramite.be.DocumentoIncluido;
import org.cip.esymons.tramite.be.Transaccion;

/**
 *
 * @author christian
 */
public class JasperController {

    private DirectivosDelegate directDelegado;

    public JasperController() {
        directDelegado = new DirectivosDelegate();
    }

    @SuppressWarnings("static-access")
    public String exportarFichaPreInscripcion() {
        Map parametros = new HashMap();
        List listaPre = new ArrayList();
        listaPre.add(new Certificado());
        String parCertNro = "035534";
        parametros.put("parCertNro", parCertNro);
        String parColEsp = "de Sistemas";
        parametros.put("parColEsp", parColEsp);
        String parColNom = "JAVIER ENRIQUE PAREDES LOPEZ";
        parametros.put("parColNom", parColNom);
        String parColCip = "000087";
        parametros.put("parColCip", parColCip);

        parametros.put("parCertDiaInsc", "31");

        parametros.put("parCertMesInsc", "Setiembre");

        parametros.put("parCertAnioInsc", "2010");

        parametros.put("parCertDiaVal", "21");

        parametros.put("parCertMesVal", "Setiembre");

        parametros.put("parCertAnioVal", "2010");

        String parDecaNomb = "Ing. Fernando Rodriguez Avalos";
        parametros.put("parDecaNomb", parDecaNomb);
        String parNumero = "7831738";
        parametros.put("parNumero", new Long(parNumero));
        String parPropietario = "Jose Peres XXXXX";
        parametros.put("parPropietario", parPropietario);
        String parUbicacion = "Av. Las dewomdc dw j ";
        parametros.put("parUbicacion", parUbicacion);
        RutaCarpetaReporte ruta = new RutaCarpetaReporte();
        String rutaJasper = "", rutaPDF = "";
        rutaJasper = ruta.getRuta() + "rptCertificadoConstruccion.jasper";
        rutaPDF = ruta.getRuta() + "rptCertificadoConstruccion.pdf";
        try {
            File entrada = new File(rutaJasper);
            JasperPrint print = JasperFillManager.fillReport(new FileInputStream(entrada), parametros, new JRBeanCollectionDataSource(listaPre));
            if (ruta.generarPDF(rutaPDF, print)) {
            }
        } catch (Exception e) {
            System.out.println("-------" + e.toString());
        }
        return "";
    }

    @SuppressWarnings("static-access")
    public String exportarCertHabil(Certificado cert, boolean preformateado) {
        Map parametros = new HashMap();
        List listaPre = new ArrayList();
        listaPre.add(new Certificado());
        parametros.put("parCertNro", cert.getDocumentoGenerado().getDocNumero());
        Colegiado col = ((PersonaNatural) cert.getDocumentoGenerado().getFkSolCodigo()).getColegiado();
        String parColEsp = "";
//        parColEsp = col.getListaFormacion().get(0).getEspCodigo().getEspDescripcion();
//        parColEsp = parColEsp.substring(10, parColEsp.length());
        for (ColegiadoEspecialidad colEs : col.getColegiadoEspecialidadCollection()) {
            String temp;
            temp = colEs.getEcaCodigo().getEspCodigo().getEspDescripcion();
            temp = temp.substring(11, temp.length());
            parColEsp = parColEsp + temp + ", ";

        }
        parColEsp = parColEsp.substring(0, parColEsp.length() - 2);
        parametros.put("parColEsp", parColEsp);
        parametros.put("parColNom", col.getPersonaNatural().getNombreCompleto());
        parametros.put("parColCip", col.getColnumeroCip());
        SimpleDateFormat formatter;
        formatter = new SimpleDateFormat("dd 'de' MMMMM 'de' yyyy", Locale.getDefault());

        String parCertFechInsc = formatter.format(col.getColfechaIncorporacion());
        parametros.put("parCertFechInsc", parCertFechInsc);
        String parCertVal = formatter.format(cert.getChaFechvigencia());
        parametros.put("parCertVal", parCertVal);
        String fechahoy = formatter.format(new Date());
        parametros.put("fechahoy", fechahoy);
        if (!preformateado) {
            parametros.put("parDecaNomb", "Ing. " + directDelegado.buscaDecano().getColCodigo().getPersonaNatural().getNombreCompleto());
        } else {
            parametros.put("parDecaNomb", " ");
        }

        RutaCarpetaReporte ruta = new RutaCarpetaReporte();
        String rutaJasper = "", rutaPDF = "";
        rutaJasper = ruta.getRuta() + "rptCertificadoHabilidad.jasper";
        rutaPDF = ruta.getRuta() + "rptCertificadoHabilidad.pdf";

        try {
            Reporteador reporteador = new Reporteador();
            reporteador.exportarReporte("rptCertificadoHabilidad", FormatoExportacion.html, listaPre, parametros);
            return "true";
//            File entrada = new File(rutaJasper);
//            JasperPrint print = JasperFillManager.fillReport(new FileInputStream(entrada), parametros, new JRBeanCollectionDataSource(listaPre));
//            if (ruta.generarPDF(rutaPDF, print)) {
//                return "true";
//            } else {
//                return "false";
//            }
        } catch (Exception e) {
            return "false";
        }
    }

    @SuppressWarnings("static-access")
    public String exportarCertConst(Certificado cert, boolean preformateado) {
        Map parametros = new HashMap();
        List listaPre = new ArrayList();
        listaPre.add(new Certificado());
        parametros.put("parCertNro", cert.getDocumentoGenerado().getDocNumero());
        Colegiado col = ((PersonaNatural) cert.getDocumentoGenerado().getFkSolCodigo()).getColegiado();
        String parColEsp = "";
        for (ColegiadoEspecialidad colEs : col.getColegiadoEspecialidadCollection()) {
            parColEsp = parColEsp + colEs.getEcaCodigo().getEspCodigo().getEspDescripcion() + ", ";
        }
        parColEsp = parColEsp.substring(0, parColEsp.length() - 2);
        parametros.put("parColEsp", parColEsp);
        parametros.put("parColNom", col.getPersonaNatural().getNombreCompleto());
        parametros.put("parColCip", col.getColnumeroCip());
        SimpleDateFormat formatter;
        formatter = new SimpleDateFormat("dd", Locale.getDefault());
        String parCertFechInsc = formatter.format(cert.getChaFechemision());
        parametros.put("parCertDiaInsc", parCertFechInsc);
        formatter = new SimpleDateFormat("MMMMM", Locale.getDefault());
        parCertFechInsc = formatter.format(cert.getChaFechemision());
        parametros.put("parCertMesInsc", parCertFechInsc);
        formatter = new SimpleDateFormat("yyyy", Locale.getDefault());
        parCertFechInsc = formatter.format(cert.getChaFechemision());
        parametros.put("parCertAnioInsc", parCertFechInsc);
        formatter = new SimpleDateFormat("dd", Locale.getDefault());
        parCertFechInsc = formatter.format(cert.getChaFechvigencia());
        parametros.put("parCertDiaVal", parCertFechInsc);
        formatter = new SimpleDateFormat("MMMMM", Locale.getDefault());
        parCertFechInsc = formatter.format(cert.getChaFechvigencia());
        parametros.put("parCertMesVal", parCertFechInsc);
        formatter = new SimpleDateFormat("yyyy", Locale.getDefault());
        String parCertVal = formatter.format(cert.getChaFechvigencia());
        parametros.put("parCertAnioVal", parCertVal);
        if (!preformateado) {
            parametros.put("parDecaNomb", "Ing. " + directDelegado.buscaDecano().getColCodigo().getPersonaNatural().getNombreCompleto());
        } else {
            parametros.put("parDecaNomb", " ");
        }
        parametros.put("parPropietario", cert.getPropietario());
        parametros.put("parUbicacion", cert.getChaDireccion() + " Urb. " + cert.getChaUrbanizacion() + " " + cert.getCodDistrito().getDisNombre() + " " + cert.getCodDistrito().getProCodigo().getProNombre() + " " + cert.getCodDistrito().getProCodigo().getDepCodigo().getDepNombre());
        RutaCarpetaReporte ruta = new RutaCarpetaReporte();
        String rutaJasper = "", rutaPDF = "";
        rutaJasper = ruta.getRuta() + "rptCertificadoConstruccion.jasper";
        rutaPDF = ruta.getRuta() + "rptCertificadoConstruccion.pdf";

        try {
            Reporteador reporteador = new Reporteador();
            reporteador.exportarReporte("rptCertificadoConstruccion", FormatoExportacion.html, listaPre, parametros);
            return "true";
//            File entrada = new File(rutaJasper);
//            JasperPrint print = JasperFillManager.fillReport(new FileInputStream(entrada), parametros, new JRBeanCollectionDataSource(listaPre));
//            if (ruta.generarPDF(rutaPDF, print)) {
//                return "true";
//            } else {
//                return "false";
//            }
        } catch (Exception e) {
            return "false";
        }
    }

    @SuppressWarnings("static-access")
    public String exportarCertObras(Certificado cert, boolean preformateado) {
        Map parametros = new HashMap();
        List listaPre = new ArrayList();
        listaPre.add(new Certificado());
        parametros.put("parCertNro", cert.getDocumentoGenerado().getDocNumero());
        Colegiado col = ((PersonaNatural) cert.getDocumentoGenerado().getFkSolCodigo()).getColegiado();
        String parColEsp = "";
        for (ColegiadoEspecialidad colEs : col.getColegiadoEspecialidadCollection()) {
            parColEsp = parColEsp + colEs.getEcaCodigo().getEspCodigo().getEspDescripcion() + ", ";
        }
        parColEsp = parColEsp.substring(0, parColEsp.length() - 2);
        parametros.put("parColEsp", parColEsp);
        parametros.put("parColNom", col.getPersonaNatural().getNombreCompleto());
        parametros.put("parColCip", col.getColnumeroCip());
        SimpleDateFormat formatter;
        formatter = new SimpleDateFormat("dd", Locale.getDefault());
        String parCertFechInsc = formatter.format(cert.getChaFechemision());
        parametros.put("parCertDiaInsc", parCertFechInsc);
        formatter = new SimpleDateFormat("MMMMM", Locale.getDefault());
        parCertFechInsc = formatter.format(cert.getChaFechemision());
        parametros.put("parCertMesInsc", parCertFechInsc);
        formatter = new SimpleDateFormat("yyyy", Locale.getDefault());
        parCertFechInsc = formatter.format(cert.getChaFechemision());
        parametros.put("parCertAnioInsc", parCertFechInsc);
        formatter = new SimpleDateFormat("dd", Locale.getDefault());
        parCertFechInsc = formatter.format(cert.getChaFechvigencia());
        parametros.put("parCertDiaVal", parCertFechInsc);
        formatter = new SimpleDateFormat("MMMMM", Locale.getDefault());
        parCertFechInsc = formatter.format(cert.getChaFechvigencia());
        parametros.put("parCertMesVal", parCertFechInsc);
        formatter = new SimpleDateFormat("yyyy", Locale.getDefault());
        String parCertVal = formatter.format(cert.getChaFechvigencia());
        parametros.put("parCertAnioVal", parCertVal);
        if (!preformateado) {
            parametros.put("parDecaNomb", "Ing. " + directDelegado.buscaDecano().getColCodigo().getPersonaNatural().getNombreCompleto());
        } else {
            parametros.put("parDecaNomb", " ");
        }
        parametros.put("parModalidad", cert.getChaLpcppad());
        parametros.put("parProyecto", cert.getChaProyecto());
        parametros.put("parPropietario", cert.getPropietario());
        String costo = Utiles.aCadena(cert.getChaCostoobra().doubleValue());
        //String costo=cert.getChaCostoobra().toString();
        //String costos[];
        String entero, decimal;
        if (!costo.isEmpty()) {
            String costos[] = costo.split("\\.");
            entero = costos[0];
            decimal = costos[1];
            int cont = 0;
            costo = "";
            if (entero.length() > 6) {
                costo = costo.concat(entero.substring(0, entero.length() - 6));
                costo = costo.concat("' ");
                costo = costo.concat(entero.substring(entero.length() - 6, entero.length() - 3));
                costo = costo.concat(",");
                costo = costo.concat(entero.substring(entero.length() - 3, entero.length()));
            } else if (entero.length() > 3) {
                costo = costo.concat(entero.substring(0, entero.length() - 3));
                costo = costo.concat(",");
                costo = costo.concat(entero.substring(entero.length() - 3, entero.length()));
            } else {
                costo = entero;
            }
            costo = costo.concat(".").concat(decimal);
        }
        parametros.put("parCosto", costo);
        parametros.put("parSimbolo", cert.getFkTmoCodigo().getTmoSimbolo());
        parametros.put("parDep", cert.getCodDistrito().getProCodigo().getDepCodigo().getDepNombre());
        parametros.put("parProv", cert.getCodDistrito().getProCodigo().getProNombre());
        parametros.put("parDist", cert.getCodDistrito().getDisNombre());
        parametros.put("parUrb", cert.getChaUrbanizacion());
        parametros.put("parCall", cert.getChaDireccion());
        RutaCarpetaReporte ruta = new RutaCarpetaReporte();
        String rutaJasper = "", rutaPDF = "";
        rutaJasper = ruta.getRuta() + "rptCertificadoObras.jasper";
        rutaPDF = ruta.getRuta() + "rptCertificadoObras.pdf";

        try {
            Reporteador reporteador = new Reporteador();
            reporteador.exportarReporte("rptCertificadoObras", FormatoExportacion.html, listaPre, parametros);
            return "true";
//            File entrada = new File(rutaJasper);
//            System.out.print("entro al Jasper");
//            JasperPrint print = JasperFillManager.fillReport(new FileInputStream(entrada), parametros, new JRBeanCollectionDataSource(listaPre));
//            if (ruta.generarPDF(rutaPDF, print)) {
//                return "true";
//            } else {
//                return "false";
//            }
        } catch (Exception e) {
            return "false";
        }
    }

    @SuppressWarnings("static-access")
    public String reporteCertificado() {
        Map parametros = new HashMap();
        TramitesController controller = (TramitesController) ControladorAbstracto.getBean("TramitesController");
        List<DocumentoIncluido> docs = controller.getDocumentosRecibidos();

//        try {
//            ConsejoDepartamentalDelegate consejo = new ConsejoDepartamentalDelegate();
//            ConsejoDepartamental cons = consejo.buscarActivo();
//            parametros.put("DirLogo", cons.getCdeLogoReporte());
//        } catch (Exception e) {
//            ControladorAbstracto.error(e.getMessage());
//        }

        if (controller.isComboActivo()) {
            parametros.put("tramite", "Todos");
        } else {
            parametros.put("tramite", controller.getTramite().getTrmNombre());
        }
        if (controller.getEstadoCert() == 0) {
            parametros.put("estadoCert", "Anulado");
        } else if (controller.getEstadoCert() == 1) {
            parametros.put("estadoCert", "Todos");
        } else {
            parametros.put("estadoCert", "Entregado");
        }
        parametros.put("fechIni", controller.getFechIni());
        parametros.put("fechFin", controller.getFechFin());
        parametros.put("total", docs.size());

        try {
            Reporteador reporteador = new Reporteador();
            reporteador.exportarReporte("rptCertificados", FormatoExportacion.pdf, docs, parametros);
            return "true";
        } catch (Exception e) {
            return "false";
        }
    }

    @SuppressWarnings("static-access")
    public String reporteDocInterno() {
        Map parametros = new HashMap();
        documentosController controller = (documentosController) ControladorAbstracto.getBean("documentosController");
        List<DocumentoIncluido> docs = controller.getDocumentosRecibidos();

        if (controller.isEstadoComboArea()) {
            parametros.put("area", "Todos");
        } else {
            parametros.put("area", controller.getAreaSeleccionada().getAreNombre());
        }
        if (controller.getEstadoCert() == 0) {
            parametros.put("estado", "Todos");
        } else if (controller.getEstadoCert() == 1) {
            parametros.put("estado", "Iniciado");
        } else if (controller.getEstadoCert() == 2) {
            parametros.put("estado", "Recepcionado");
        } else if (controller.getEstadoCert() == 3) {
            parametros.put("estado", "Tramitado");
        } else if (controller.getEstadoCert() == 4) {
            parametros.put("estado", "Archivado");
        }
        parametros.put("fechIni", controller.getFechIni());
        parametros.put("fechFin", controller.getFechaFin());
        parametros.put("total", docs.size());

        if (controller.getTipoTrans() == 1) {
            parametros.put("tipoTrans", "Enviados");
        } else {
            parametros.put("tipoTrans", "Recibidos");
        }

        try {
            Reporteador reporteador = new Reporteador();
            reporteador.exportarReporte("rptDocInterno", FormatoExportacion.pdf, docs, parametros);
            return "true";
        } catch (Exception e) {
            return "false";
        }
    }

    @SuppressWarnings("static-access")
    public String reporteDocExter() {
        Map parametros = new HashMap();
        TramitesController controller = (TramitesController) ControladorAbstracto.getBean("TramitesController");
        List<Transaccion> docs = controller.getListaTransacciones();

        if (controller.getEstadoCert() == 2) {
            parametros.put("estado", "Todos");
        } else if (controller.getEstadoCert() == 0) {
            parametros.put("estado", "Iniciado");
        } else {
            parametros.put("estado", "Tramitado");
        }
        parametros.put("fechIni", controller.getFechIni());
        parametros.put("fechFin", controller.getFechFin());
        parametros.put("total", docs.size());

        try {
            Reporteador reporteador = new Reporteador();
            reporteador.exportarReporte("rptDocExter", FormatoExportacion.pdf, docs, parametros);
            return "true";
        } catch (Exception e) {
            return "false";
        }
    }
}
